]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Use Meta.Display.lookup_keyboard_action to enable workspace switches
authorColin Walters <walters@verbum.org>
Wed, 17 Mar 2010 02:08:52 +0000 (22:08 -0400)
committerColin Walters <walters@verbum.org>
Thu, 18 Mar 2010 18:15:07 +0000 (14:15 -0400)
Also refactor Alt-F2 to use this as well.

https://bugzilla.gnome.org/show_bug.cgi?id=613101

js/ui/main.js
js/ui/windowManager.js

index 5fe478336e758949ff9d60d729a4ffab5785fcdd..bb837a3bda70017b32ffb57af50fed6cf6250fe8 100644 (file)
@@ -279,6 +279,9 @@ function _globalKeyPressHandler(actor, event) {
         }
     } else if (type == Clutter.EventType.KEY_RELEASE) {
         let symbol = event.get_key_symbol();
+        let keyCode = event.get_key_code();
+        let modifierState = Shell.get_event_state(event);
+        // Check the overview key first, this isn't a Meta.KeyBindingAction yet
         if (symbol == Clutter.Super_L || symbol == Clutter.Super_R) {
             // The super key is the default for triggering the overview, and should
             // get us out of the overview when we are already in it.
@@ -286,8 +289,25 @@ function _globalKeyPressHandler(actor, event) {
                 overview.hide();
 
             return true;
-        } else if (symbol == Clutter.F2 && (Shell.get_event_state(event) & Clutter.ModifierType.MOD1_MASK)) {
-            getRunDialog().open();
+        }
+
+        // Whitelist some of the Metacity actions
+        let display = global.screen.get_display();
+        let activeWorkspaceIndex = global.screen.get_active_workspace_index();
+
+        // This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
+        let action = display.get_keybinding_action(symbol, keyCode, modifierState);
+        switch (action) {
+            case Meta.KeyBindingAction.WORKSPACE_LEFT:
+                wm.actionMoveWorkspaceLeft();
+                return true;
+            case Meta.KeyBindingAction.WORKSPACE_RIGHT:
+                wm.actionMoveWorkspaceRight();
+                return true;
+            case Meta.KeyBindingAction.PANEL_RUN_DIALOG:
+            case Meta.KeyBindingAction.COMMAND_2:
+                getRunDialog().open();
+                return true;
         }
     }
 
index b3c2199a3a0efca11ebdc8faf90306048f035163..eb3db1b9d72f4fa2474269aa2c44417ac0fa9097 100644 (file)
@@ -315,27 +315,37 @@ WindowManager.prototype = {
         if (global.screen.n_workspaces == 1)
             return;
 
-        if (this._workspaceSwitcherPopup == null)
+        if (this._workspaceSwitcherPopup == null && Main.overview.visible)
             this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup();
 
-        let activeWorkspaceIndex = global.screen.get_active_workspace_index();
-
         if (binding == "switch_to_workspace_left") {
-            if (activeWorkspaceIndex > 0) {
-                global.screen.get_workspace_by_index(activeWorkspaceIndex - 1).activate(global.get_current_time());
-                this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, activeWorkspaceIndex - 1);
-            }
-            else
-                this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, activeWorkspaceIndex);
+            this.actionMoveWorkspaceLeft();
         }
 
         if (binding == "switch_to_workspace_right") {
-            if (activeWorkspaceIndex <  global.screen.n_workspaces - 1) {
-                global.screen.get_workspace_by_index(activeWorkspaceIndex + 1).activate(global.get_current_time());
+            this.actionMoveWorkspaceRight();
+        }
+    },
+
+    actionMoveWorkspaceLeft: function() {
+        let activeWorkspaceIndex = global.screen.get_active_workspace_index();
+        if (activeWorkspaceIndex > 0) {
+            global.screen.get_workspace_by_index(activeWorkspaceIndex - 1).activate(global.get_current_time());
+            if (this._workspaceSwitcherPopup != null)
+                this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, activeWorkspaceIndex - 1);
+        } else if (this._workspaceSwitcherPopup != null){
+            this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, activeWorkspaceIndex);
+        }
+    },
+
+    actionMoveWorkspaceRight: function() {
+        let activeWorkspaceIndex = global.screen.get_active_workspace_index();
+        if (activeWorkspaceIndex <  global.screen.n_workspaces - 1) {
+            global.screen.get_workspace_by_index(activeWorkspaceIndex + 1).activate(global.get_current_time());
+            if (this._workspaceSwitcherPopup != null)
                 this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, activeWorkspaceIndex + 1);
-            }
-            else
-                this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, activeWorkspaceIndex);
+        } else if (this._workspaceSwitcherPopup != null) {
+            this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, activeWorkspaceIndex);
         }
     }
 };